<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
	
	class Ctocplus extends MX_Controller {
		public function __construct(){
			parent::__construct();
			//$this->load->model('M_mapping'); 
			$this->load->helper('regex_c_to_cplus'); // ok chưa. ok roi :), cứ hỏi thoải mái, không phải ngại. ok co khúc mắc sẽ hõi để giải wit ngay:)
			$this->load->helper('c_keywords');
			$this->init();
		}		
		
		public  function init(){
			$_SESSION['open_brace'] = 0;
			$_SESSION['close_brace'] = 0;
		}
		
		public function get_open_brace(){
			return $_SESSION['open_brace'];
		}
		
		public function get_close_brace(){
			return $_SESSION['close_brace'];
		}
		
		public function increment_open_brace(){
			$_SESSION['open_brace'] = $_SESSION['open_brace'] + 1; 
		}
		// nhưng khuyến khích cách tổ chức code càng hay càng tốt
		// mày có thể xử dụng helper để viết những hàm cần thiết nếu controller code nhiều quá, nói chung
		// gciờ nói nhiều quá còn một nùi :(
		
		// chỉ mày cách hiển thị lỗi và dùng lỗi,
		//đầu tiên mày cần định nghĩa biến hằng cho lỗi xong rồi xử dụng như sau
		
		public function tab_number($number){
			$tab = "\t";
			for($i=0; i<$number; $i++)
				$tab .= '\t'; 
			return $tab;
		}
		public function set_curr_tab($number){
			$_SESSION['tab'] = $this->tab_number($number);
			
		}
		
		public function get_curr_tab(){
			return $_SESSION['tab'];
		}
		
		public function convert_c_to_cplus($code)
		{				
			if(preg_match(rex_for_open_brace(), $code))
			{			
				$this->increment_open_brace();
				$_SESSION["brace_new"] .= "\t";
				$_SESSION["brace_old"] = substr($_SESSION["brace_new"], 0, -1);
				return $this->get_curr_tab().$code;
			}
			else if(preg_match(rex_for_close_brace(), $code))
			{
				$_SESSION["brace_new"] = substr($_SESSION["brace_new"], 0, -1);
				return $_SESSION["brace_new"].$code;
			}
			// check khai bao function va library
			if (preg_match(rex_for_header(), $code) ||	preg_match(rex_for_function_line(), $code) || preg_match(rex_for_comment_star(),$code))
			//if(preg_match(rex_for_comment_star(),$code))
			{	
				return $code;
			} 						
			// check khai bao bien
			else if(preg_match(rex_for_keywords(), $code) )
			{ 				
					//Gọi hàm check dấu phẩy
					$temp = check_comma($code);
				    if ($temp != "true" && $temp != "false")
				    {
				    		// Return ra lỗi thiếu dấu phẩy			    		
				    		return $temp;
					}else
					{
						if($temp == "true")
						{
							//-----------------------------------Trường hợp Input và Output --------------------------------------------
							if(preg_match(rex_for_is_IO(), $code))
							{
								if(preg_match(rex_for_printf(), $code))
								{								
									if(preg_match(rex_for_behind_IO_type_1(), $code, $matches))
									{
										
										$str = convert_IO($matches[0], "printf");									
										if($str == "false")
										{
											return "/* ".$code." */ abc".ERROR_01;
										}
										else
										{	
											return $_SESSION["brace_new"].get_cpluskey("printf").$str;
										}									
									}
									else if(preg_match(rex_for_behind_printf_type_2(), $code, $matches))
									{												
										return $_SESSION["brace_new"].get_cpluskey("printf").substr(substr($matches[0], 1), 0, -2).';';
									}
								}
								else if(preg_match(rex_for_scanf(), $code))
								{
									if(preg_match(rex_for_behind_IO_type_1(), $code, $matches))
									{
										$str = convert_IO($matches[0], "scanf");										
										return $_SESSION["brace_new"]."cin".$str;
									}
								}
								else if(preg_match(rex_for_gets_puts(), $code, $matches))
								{							
									$type = substr($matches[0], 0, 4);
									return $_SESSION["brace_new"].convert_IO($matches[0],  $type);
								}
							}
							//----------------------------------Trường hợp liên quan tới FILE --------------------------------------------
							else if(preg_match(rex_for_init_file(), $code))
							{
								return $_SESSION["brace_new"].convert_File($code, "init");
							}
							else if(preg_match(rex_for_open_file(), $code))
							{
								return $_SESSION["brace_new"].convert_File($code, "open");
							}
							else if(preg_match(rex_for_close_file(), $code))
							{
								return $_SESSION["brace_new"].convert_File($code, "close");
							}
							else if(preg_match(rex_for_write_file(), $code))
							{								
								return $_SESSION["brace_new"].convert_File($code, "write");
							}
							else if(preg_match(rex_for_read_file(), $code))
							{
								return $_SESSION["brace_new"].convert_File($code, "read");
							}
							else
								return $_SESSION["brace_new"].$code;
						}
						else if($temp == "false")
						{
							return "/* ".$code." */ fdsfsd".ERROR_01;
						}						
					}		
			}
			// khong the convert
			else{
				return "/* ".$code." */ ".ERROR_01;
			}
		}

		
}